package com.jt.sevrice;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.dao.UserMapper;
import com.jt.pojo.User;
import com.jt.vo.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.UUID;
@Service
public class UserServiceImpl implements UserSevrice {
    @Autowired
    private UserMapper userMapper;
    @Override
    public String login(User user) {
        //获取vue中顾客填写的password
        String password= user.getPassword();
        //进行md5的加密  因为设计的时候 表里的密码是进行md5加密的  所以需要将网络中的密码进行md5加密以后再去查
        String md5pass = DigestUtils.md5DigestAsHex(password.getBytes());
        //将password的值设置成md5pass
        user.setPassword(md5pass);
        //设置条件构造器   插入user数据 这时候的数据就是user（username=xxx，password=md5pass）
        QueryWrapper<User>queryWrapper =new QueryWrapper(user);
        //因为userMapper是实现了BaseMapper  调用selectone的方法 如果有的话 就是成功 没有的话就是null
        User userDB = userMapper.selectOne(queryWrapper);
        //如果成功了 返回随机的uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        return userDB==null?null:uuid;

    }

    @Override
    public PageResult getUserList(PageResult pageResult) {
        //Ipage的话是MP提供的一个分页的工具  需要添加拦截器  page里面添加数据（第一个是当前页面的页码，这个就是每页可以放的条数）
        IPage iPage =new Page(pageResult.getPageNum(), pageResult.getPageSize());
        //增加条件构造器
        QueryWrapper queryWrapper=new QueryWrapper();
        //查询是否有值
        boolean flag = StringUtils.hasLength(pageResult.getQuery());
        //如果flag为true  username =pageresult的查询
        queryWrapper.like(flag, "username", pageResult.getQuery());
        //usermapper.selectpage  就是将查询到的结果封装到ipage里
        iPage = userMapper.selectPage(iPage, queryWrapper);
        //这个就是总记录数  一共有多少条数据
        long total=iPage.getTotal();
        //rows就是分页后的结果   数据的集合
        List<User>rows = iPage.getRecords();
        System.out.println(rows);
        return pageResult.setTotal(total).setRows(rows);
    }

    @Override
    public void updateById(User user) {
        userMapper.updateById(user);
    }
    //添加用户  用户的添加包括用户名 password 还有 createdtime还有updatedtime  因为插入和修改操作都需要这两个字段 所以要实现自动填充
    //创建BasePojo类
    @Override
    public void addUser(User user) {
        String userPassword = user.getPassword();
        String md5DigestAsHex = DigestUtils.md5DigestAsHex(userPassword.getBytes());
        user.setPassword(md5DigestAsHex);
        userMapper.insert(user);
    }

    @Override
    public void deleteById(Integer id) {
        userMapper.deleteById(id);
    }
}
